/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * AboutPanel.java
 *
 * Created on 14.10.2009, 16:17:17
 */

package vizzy.forms.panels;

import java.awt.Cursor;
import java.awt.Desktop;
import java.awt.Rectangle;
import java.net.URI;
import org.apache.log4j.Logger;
import vizzy.controller.VizzyController;
import vizzy.model.Conf;
import vizzy.model.SettingsModel;

/**
 *
 * @author sergeil
 */
public class AboutPanel extends javax.swing.JFrame {

    private static final Logger log = Logger.getLogger(AboutPanel.class);

    private VizzyController controller;
    private SettingsModel settings;

    /** Creates new form AboutPanel */
    public AboutPanel(Rectangle rect, VizzyController controller, SettingsModel settings) {
        this.controller = controller;
        this.settings = settings;
        initComponents();
        initSizeAndPosition(rect);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("About Vizzy");
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                onWIndowClose(evt);
            }
        });

        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        jLabel1.setText("<html>Vizzy Flash Tracer<br>2007 - 2011  ©<br>Developed by Sergei Ledvanov</html>");
        jLabel1.setVerticalAlignment(javax.swing.SwingConstants.TOP);

        jLabel2.setForeground(new java.awt.Color(0, 51, 204));
        jLabel2.setText("sergei.ledvanov@gmail.com");
        jLabel2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                emailClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                onMouseEntered(evt);
            }
        });

        jLabel3.setForeground(new java.awt.Color(0, 51, 204));
        jLabel3.setText("Product website");
        jLabel3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                websiteClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                onMouseEntered(evt);
            }
        });

        jButton1.setText("OK");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jLabel4.setForeground(new java.awt.Color(255, 0, 0));
        jLabel4.setText("<html>Donate? Sure!</html>");
        jLabel4.setVerticalAlignment(javax.swing.SwingConstants.TOP);
        jLabel4.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                donateClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                onMouseEntered(evt);
            }
        });

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .addContainerGap()
                        .add(jLabel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 253, Short.MAX_VALUE))
                    .add(layout.createSequentialGroup()
                        .addContainerGap()
                        .add(jLabel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 237, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                    .add(layout.createSequentialGroup()
                        .addContainerGap()
                        .add(jLabel3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 253, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                    .add(layout.createSequentialGroup()
                        .add(109, 109, 109)
                        .add(jButton1))
                    .add(layout.createSequentialGroup()
                        .addContainerGap()
                        .add(jLabel4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 253, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 70, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jLabel2)
                .add(5, 5, 5)
                .add(jLabel3)
                .add(18, 18, 18)
                .add(jLabel4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 52, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(18, 18, 18)
                .add(jButton1)
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void websiteClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_websiteClicked
        try {
            if (Desktop.isDesktopSupported())
                Desktop.getDesktop().browse(new URI(Conf.URL_PROJECT_HOME));
        } catch (Exception ex1) {
//            log.warn("websiteClicked() error", ex1);
        }
    }//GEN-LAST:event_websiteClicked

    private void emailClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_emailClicked
        try {
            if (Desktop.isDesktopSupported())
                Desktop.getDesktop().mail(new URI(Conf.URL_MAILTO));
        } catch (Exception ex1) {
//            log.warn("emailClicked() error", ex1);
        }
    }//GEN-LAST:event_emailClicked

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        controller.aboutOKClick();
    }//GEN-LAST:event_jButton1ActionPerformed

    private void onMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_onMouseEntered
        evt.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    }//GEN-LAST:event_onMouseEntered

    private void donateClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_donateClicked
        try {
            if (Desktop.isDesktopSupported())
                Desktop.getDesktop().browse(new URI(Conf.URL_DONATION));
        } catch (Exception ex1) {
//            log.warn("donateClicked() error", ex1);
        }
    }//GEN-LAST:event_donateClicked

    private void onWIndowClose(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_onWIndowClose
        controller.aboutOKClick();
    }//GEN-LAST:event_onWIndowClose

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    // End of variables declaration//GEN-END:variables

    private void initSizeAndPosition(Rectangle rect) {
        try {
            this.setIconImage(settings.getAppIcon());
        } catch (Exception e) {
//            log.warn("initSizeAndPosition() error", e);
        }
        int x = (int)(rect.getX() + rect.getWidth() / 2 - getWidth( )/ 2);
        int y = (int)(rect.getY() + rect.getHeight() / 2 - getHeight()/ 2);
        setLocation(x, y);
    }

    @Override
    public void dispose() {
        controller = null;
        settings = null;
        super.dispose();
    }

}
